<?php
// 屏蔽错误程度E_All显示致命错误  ： E_ERROR屏蔽所有错误   默认显示警告和致命错误
error_reporting(E_ERROR);


/**
 * Created by qinpeizhou.
 * Date: 2018/5/13
 * Time: 3:14
 * Email : 1031219129@qq.com
 * 公共函数类库
 */

/**
 * 简洁的打印函数
 * @param $var
 * @param bool $exit
 */
function dump($var, $exit = true) {
    echo '<pre>';
    print_r ( $var );
    echo '</pre>';
    if ($exit) {
        die ();
    }
}


/**
 * 通用化API接口数据输出
 * author qinpeizhou
 * @param $status
 * @param $message
 * @param array $data
 * @param int $httpCode
 * @return \think\response\Json
 */
function show($message,$data=[],$httpCode=200){
    $data = [
        'code' => $httpCode,
        'message' => $message,
        'data' => (object)$data
    ];
    echo json_encode($data,$httpCode);
}

//
///**
// * 实例化redis
// * @return \Predis\Client
// */
//function p_redis(){
//    // 加载redis配置
//    $settings = parse_ini_file(dirname(__FILE__).'/../library/myconfig.php');
//    Yaf_Loader::import(dirname(__FILE__).'/../vendor/autolode.php');
//    $host = $settings["host"];
//    $port = $settings["port"];
//    $dataBase = $settings["dataBase"];
//    $server = [
//        "host"=>$host,
//        'port'=>$port,
//        'dataBase'=>$dataBase
//    ];
//    $redis = new \Predis\Client($server);
//    return $redis;
//}

/**
 * 获取Smarty对象
 * @return array
 */
function SmartyObj(){
    Yaf_Loader::import(Yaf_Application::app()->getConfig()->application->directory . '/library/Smarty.php');
    $tmp_url = Yaf_Application::app()->getConfig()->application->directory . '/views/';
    $smarty = new Smarty_Adapter($tmp_url, [
        [
            'left_delimiter'=>"<{",
            'right_delimiter'=>"}>",
            'template_dir' =>  APPLICATION_PATH."/application/views/",
            'compile_dir' =>  APPLICATION_PATH."/application/views/templates_c/",
            'cache_dir' =>  APPLICATION_PATH."/application/views/templates_d/" ,
            'caching'=>0
        ]
    ]);

    return $smarty;

}


function sms_config(){
    return  [
        "pre" => "sms_",      //验证码 redis key的前缀
        "userpre" => "user_"  //用户user pre
    ];
}
/**
 * 存储验证码 redis key
 * @param $phone
 * @return string
 */
function smsKey($phone) {
    $config = sms_config();
    return $config['pre'].$phone;
}

/**
 * 用户 key
 * @param $phone
 * @return string
 */
function userkey($phone) {
    $config = sms_config();
    return $config['userpre'].$phone;
}




/**
 * 传文件：可以通过输入的参数设置上传的文件类型
 * 上传文件的大小限制，和上传的路径
 * @author qinpeizhou
 * 2017年9月6日
 * @param $myupfile         [表单文件域name的名称]
 * @param $path             [上传的路径]
 * @param int $maxsize      [允许上传的最大值]
 * @param array $arr_mine   [允许的上传文件类型]默认是图片类型
 * @return array|string
 */

function uploadfile($myupfile,$path,$maxsize=10*1024*1024, $arr_mine=['image/jpeg','image/png','image/jpg']) {
    //判断文件是否是通过 HTTP POST 上传的
    // if (isset($_POST['submit'])) {}
    if(!is_uploaded_file($myupfile['tmp_name'])) {
        //如果有错误则直接停止脚本
        return  "上传有错误，请重新上传";
    }
    //判断是否有错误
    if ($myupfile['error']) {
        return "上传有错误，请重新上传";
    }
    //判断文件大小 -- 不允许上传大于2M的文件
    if ($myupfile['size'] > $maxsize) {
        return "上传文件过大，请重新上传";
    }
    //获取文件扩展名
    $filename = $myupfile['name'];
    // //方法一
    //strrpos 计算指定字符串在目标字符串中最后一次出现的 位置
    //strrpos(haystack, needle);
    //strrpos(大海, 针);
    // $index = strrpos($filename,'.');
    // $ext = substr($filename,$index);
    // echo "$ext";

    //方法二
    //strrchr - 查找指定字符在字符串的最后一次出现
    $ext = strrchr($filename,'.'); // .jpg
    // echo $ext;
    //判断文件类型

    //面向过程风格
    // TODO:linux系统需要安装fileinfo扩展 fileinfo
    $fs = finfo_open(FILEINFO_MIME_TYPE);
    $mine = finfo_file($fs,$myupfile['tmp_name']);

    //允许上传的文件类型
    //$arr_mine = ['image/jpeg','image/png'];
    //in_array — 检查数组中是否存在某个值
    //in_array(needle, haystack)
    if(!in_array($mine,$arr_mine)) {
        return  '文件的类型不正确，请重新上传';
    }
    //构建临时文件
    $filename = $myupfile['tmp_name'];
    //构建目标文件
    // $path = './upload';
    $destination  = $path.'/'.date('YmdHis').$ext;
    //将上传文件移动到新的位置返回布尔
    //move_uploaded_file(filename,destination)
    //move_uploaded_file(临时文件,自定义目标文件)
    if(!move_uploaded_file($filename,$destination)) {
        return '上传失败!';
    }

    return ["filename"=>date('YmdHis').$ext];  //上传成功返回数组文件名

}

/**
 * 获取同步redis配置
 * @param $need
 * @return mixed
 */
function redis_config($need){
    $data = [
        'host'=>"127.0.0.1",
        'port'=>"6379",
        'timeOut'=>180000,
        'live_game_key'=>'live_game_key'
    ];
    return $data[$need];
}

/**
 * 获取服务器地址信息
 * @param $need
 * @return mixed
 */
function server_config($need){
    $data = [
        'host'=>"http://192.168.2.233:8811",
    ];
    return $data[$need];
}
